home *** CD-ROM | disk | FTP | other *** search
- /* Copyright (C) 1994 Free Software Foundation, Inc.
- Contributed by Joel Sherrill (jsherril@redstone-emh2.army.mil),
- On-Line Applications Research Corporation.
-
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If
- not, write to the Free Software Foundation, Inc., 675 Mass Ave,
- Cambridge, MA 02139, USA. */
-
- /* entry.s
- *
- * This file contains the entry point for the application.
- * The name of this entry point is compiler dependent.
- * It jumps to the BSP which is responsible for performing
- * all initialization.
- */
-
- .text
- .globl start | Default entry point
- .globl _start | Default entry point
- .globl M68Kvec | Vector Table
- .globl _M68Kvec | Vector Table
-
- start:
- _start:
- M68Kvec: | standard location for vectors
- _M68Kvec: | standard location for vectors
- nop | for linkers with problem
- | using location zero as entry
- jmp around
- .space 4088 | to avoid initial intr stack
- | from 135BUG on MVME13? as entry
- | and start code at 0x4000
- around:
- move.w %sr,initial_sr | save initial values
- movec %isp,%a0
- movel %a0,initial_isp
- movec %usp,%a0
- movel %a0,initial_usp
- movec %msp,%a0
- movel %a0,initial_msp
- oriw #0x0700,%sr | INTERRUPTS OFF!!!
-
-
-
- |
- | zero out uninitialized data area
- |
- zerobss:
- moveal #end,%a0 | find end of .bss
- moveal #_bss_start,%a1 | find beginning of .bss
- movel #0,%d0
-
- loop: movel #0,%a1@+ | to zero out uninitialized
- cmpal %a0,%a1
- jlt loop | loop until _end reached
-
- movel #heap_size,__C_heap_size | set ___C_heap_size
- movel #heap_memory,__C_heap_start | set ___C_heap_start
- moveal #interrupt_stack_end,%a0 | set interrupt stack pointer
- movec %a0,%isp
- moveal #stack_end,%a0 | set master stack pointer
- movec %a0,%msp
- moveal #stack_end,%a6 | set base pointer
- movw #0x3000,%sr | SUPV MODE,INTERRUPTS ON!!!
-
- #ifdef NEED_UNDERSCORES
- jsr __Board_Initialize | initialize the board
- #else
- jsr _Board_Initialize | initialize the board
- #endif
-
- move.l #0,%sp@- | envp = NULL
- move.l #0,%sp@- | argv = NULL
- move.l #0,%sp@- | argc = NULL
- #ifdef NEED_UNDERSCORES
- jsr ___libc_init | initialize the library and
- | call main
- #else
- jsr __libc_init | initialize the library and
- | call main
- #endif
- add.l #12,%sp
-
- move.l #0,%sp@- | argc = NULL
- jsr __exit | call the Board specific exit
- addq.l #4,%sp
-
- move.l initial_isp,%a0 | if __exit returns then we can
- movec %a0,%isp | restore the initial values
- move.l initial_usp,%a0
- movec %a0,%usp
- move.l initial_msp,%a0
- movec %a0,%msp
- move.w initial_sr,%sr
- rts
-
-
- .bss
-
- /*
- * So initial stack registers and status register can be saved.
- */
-
- #define DECLARE_SPACE(_name,_space,_align) \
- .globl _name ; \
- .align _align ; \
- _name##: .space _space
-
- #define DECLARE_LABEL(_name) \
- .globl _name ; \
- _name##:
-
- #define DECLARE_PTR(_name) DECLARE_SPACE(_name,4,2)
- #define DECLARE_U32(_name) DECLARE_SPACE(_name,4,2)
- #define DECLARE_U16(_name) DECLARE_SPACE(_name,2,1)
-
- DECLARE_U32(initial_isp)
- DECLARE_U32(initial_msp)
- DECLARE_U32(initial_usp)
- DECLARE_U16(initial_sr)
-
- /*
- * Require environment stuff
- */
-
- DECLARE_LABEL(_environ)
- DECLARE_PTR(environ)
-
- DECLARE_LABEL(_errno)
- DECLARE_U32(errno)
-
- /*
- * Stack Size and Space
- */
-
- .set stack_size, 0x20000
-
- DECLARE_SPACE(stack_memory,stack_size,4)
- DECLARE_LABEL(stack_end)
-
- DECLARE_SPACE(interrupt_stack_memory,0x1000,4)
- DECLARE_LABEL(interrupt_stack_end)
-